package com.skt.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.skt.domain.PO.User;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 认证相关的数据库操作
 * 职责：登录、注册、用户名检查等认证功能
 */
public interface AuthMapper extends BaseMapper<User> {

    /**
     * 分页查询用户名（用于布隆过滤器预热）
     * @param offset 偏移量
     * @param limit 每页大小
     * @return 用户名列表
     */
    @Select("SELECT username FROM user ORDER BY id LIMIT #{limit} OFFSET #{offset}")
    List<String> selectUsernamesForBloomFilter(@Param("offset") int offset, @Param("limit") int limit);

    /**
     * 根据登录标识符查询用户（用于登录）
     * @param identifier 用户名/邮箱/手机号
     * @return 用户信息
     */
    @Select("SELECT * FROM user WHERE username = #{identifier} OR email = #{identifier} OR phone = #{identifier}")
    User selectByIdentifier(@Param("identifier") String identifier);

    /**
     * 检查用户名是否存在（用于注册校验）
     * @param username 用户名
     * @return 是否存在
     */
    @Select("SELECT COUNT(*) FROM user WHERE username = #{username}")
    boolean existsByUsername(@Param("username") String username);

    /**
     * 检查邮箱是否存在
     * @param email 邮箱
     * @return 是否存在
     */
    @Select("SELECT COUNT(*) FROM user WHERE email = #{email}")
    boolean existsByEmail(@Param("email") String email);

    /**
     * 检查手机号是否存在
     * @param phone 手机号
     * @return 是否存在
     */
    @Select("SELECT COUNT(*) FROM user WHERE phone = #{phone}")
    boolean existsByPhone(@Param("phone") String phone);
}